package com.ruoyi.gbase.task;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.gbase.domain.GbaseLoadCount;
import com.ruoyi.gbase.service.IGbaseJobInfoService;
import com.ruoyi.gbase.util.PROCUil;
import com.ruoyi.nsh.util.DateUtil;
import com.ruoyi.gbase.util.GbaseLoadUtil;
import com.ruoyi.gbase.util.GbaseUtil;
import com.ruoyi.quartz.domain.SysJob;
import com.ruoyi.quartz.service.ISysJobService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.net.InetAddress;
import java.net.UnknownHostException;


/**
 * 定时任务调度测试
 * 
 * @author ruoyi
 */
@Component("loadTask")
public class LoadTask
{
    private static final Logger log = LoggerFactory.getLogger(LoadTask.class);

    private boolean autoLoadRun = false;

    @Autowired
    private IGbaseJobInfoService gbaseJobInfoService;

    @Autowired
    private GbaseUtil gbaseUtil;

    @Autowired
    private PROCUil procUil;

    @Autowired
    private ISysJobService sysJobService;

    @Autowired
    private GbaseLoadUtil gbaseLoad;

    /**
     * 自动任务_自动执行昨日入库命令
     */
    public void loadGbase()
    {
        try {
            InetAddress addr = InetAddress.getLocalHost();
            if("32.202.51.181-".equals(addr.getHostAddress())){
                log.info("当前为本机运行，不做入库操作！！！ IP:"+addr.getHostAddress());
                return ;
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

        //log.info("自动任务（loadGbase）进入");
        if(!autoLoadRun) {
            //log.info("自动任务（load）且autoLoadRun=false，可以启动进程");
            //取一下前天的数据，如果前天的 应入库-已经入库 >5 ，存在5张以上未成功，就不执行，否则就开始最新入库，剩下的手动处理。
            String rq2 = DateUtil.addDay(DateUtils.getdateYYYYMMDD(), -2);
            String rq1 = DateUtil.addDay(DateUtils.getdateYYYYMMDD(), -1);
            GbaseLoadCount gbaseJobInfo2 = gbaseJobInfoService.selectGbaseLoadCount(rq2);
            GbaseLoadCount gbaseJobInfo1 = gbaseJobInfoService.selectGbaseLoadCount(rq1);

            if (gbaseJobInfo2 == null || gbaseJobInfo1 == null) {
                log.info("对象空置跳出");
                return;
            } else if (gbaseJobInfo2.getDbnums() > gbaseJobInfo2.getGbasenums() + 5) {
                log.info("前天有超过5张表未执行完，需要手工处理完毕再进行入库(" + gbaseJobInfo2.getGbasenums() + "/" + gbaseJobInfo2.getDbnums() + ")");
                return;
            } else if(gbaseJobInfo1.getGbasenums()<gbaseJobInfo1.getDbnums()){
                autoLoadRun = true;
                //开始跑昨天的数据
                log.info("自动任务（load）启动，跑批所有数据：" + rq1);
                gbaseUtil.connectGBase();
                gbaseLoad.loadTable(rq1, null, null, "5");
                gbaseLoad.loadTable(rq1, null, null, "2");
                gbaseLoad.loadTable(rq1, null, null, "0");
                gbaseLoad.loadTable(rq1, null, null, "1");
                log.info("自动任务（load）当前数据全部跑完：" + rq1+" isRun改为false");
                autoLoadRun = false;
            }else{
                //log.info("当前无需要跑的数据");
            }
        }
        //log.info("自动任务（load）结束");
    }


    /**
     * 自动任务_自动执行昨日入库命令
     */
    public void execProc(Long jobid)
    {
        //log.info("自动跑批存储过程（execproc）进入");
        SysJob sysJob = sysJobService.selectJobById(jobid);
        if(sysJob!=null){
            //log.info("开始进入存储过程执行逻辑:"+sysJob.getProcname());
            procUil.executeProc(sysJob);
        }

       // log.info("自动任务（load）结束");
    }


    /**
     * 自动任务_添加功能 跑最近10天这个表的数据
     */
    public void execLastLoad(String etlnum,String schemaName,String tableName)
    {

        gbaseUtil.connectGBase();
        int num=0;
        num = Integer.valueOf(etlnum);
        String todayStr = DateUtils.getdateYYYYMMDD();
        for(int i=num;i>0;i--){
            //昨天日期
            String yestDay = DateUtil.addDay(todayStr, -1*i);
            gbaseLoad.loadTable(yestDay,schemaName,tableName,"5");
            gbaseLoad.loadTable(yestDay,schemaName,tableName,"2");
            gbaseLoad.loadTable(yestDay,schemaName,tableName,"0");
            gbaseLoad.loadTable(yestDay,schemaName,tableName,"1");
        }


    }


}
